package modelo;

import java.util.ArrayList;
import java.util.List;
import java.util.ListIterator;
import modelo.funciones.Funcion;

public class Modelo implements Observado{
	
	private List<Funcion> elementos;
	private List<String> nombres;
	private List<Observador> lista;
	
	public Modelo(){
		elementos=new ArrayList<Funcion>();
		lista=new ArrayList<Observador>();
		nombres=new ArrayList<String>();
	}
	
	public void cambie()
	{
		ListIterator<Observador> iterador= lista.listIterator();
		while (iterador.hasNext()){
			Observador obs=iterador.next();
			obs.update(this);
		}
	}
	
	public void agregarFuncion(Funcion f,String nombre){
		this.getFunciones().add(f);
		this.getNombresFunciones().add(nombre);
		this.cambie();
	}
	
	public void sacarFuncion(Funcion f){
		this.getNombresFunciones().remove(this.getFunciones().indexOf(f));
		this.getFunciones().remove(f);
		this.cambie();
	}
	
	public void sacarFuncion(String nombre){
		this.getFunciones().remove(this.getNombresFunciones().indexOf(nombre));
		this.getNombresFunciones().remove(nombre);
		this.cambie();
	}
	
	public List<Funcion> getFunciones(){
		return this.elementos;
	}
	
	public List<String> getNombresFunciones(){
		return this.nombres;
	}

	public void agregarObservador(Observador obs) {
		lista.add(obs);
	}

	public void sacarObservador(Observador obs) {
		lista.remove(obs);	
	}
}
